gusucode.com > VC++ EMF图片浏览器(可读emf、wmf、emz、wmz、png……等)-源码程序 > VC++ EMF图片浏览器(可读emf、wmf、emz、wmz、png……等)-源码程序/code/Src/Client/scwinlib/SCImgStatic.cpp
//Download by http://www.NewXing.com /* * This file is part of the EMFexplorer projet. * Copyright (C) 2004 Smith Charles. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * Extension: for commercial use, apply the Equity Public License, which * adds to the normal terms of the GLPL a condition of donation to the author. * If you are interested in support for this source code, * contact Smith Charles <smith.charles@free.fr> for more information. */ #include "stdafx.h" #include "SCImgStatic.h" // #ifdef _DEBUG // #define new DEBUG_NEW // #undef THIS_FILE // static char THIS_FILE[] = __FILE__; // #endif ///////////////////////////////////////////////////////////////////////////// // CSCImgStatic CSCImgStatic::CSCImgStatic() :m_pImage(NULL), m_fWidth(0), m_fHeight(0) { } CSCImgStatic::~CSCImgStatic() { if (m_pImage) delete m_pImage; } BEGIN_MESSAGE_MAP(CSCImgStatic, CStatic) //{{AFX_MSG_MAP(CSCImgStatic) ON_WM_PAINT() ON_WM_ERASEBKGND() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSCImgStatic message handlers void CSCImgStatic::OnPaint() { using namespace Gdiplus; CPaintDC dc(this); // device context for painting // getting rect of static CRect rect; GetClientRect(&rect); dc.PatBlt(rect.left, rect.top, rect.right, rect.bottom, WHITENESS); if (!m_pImage) return; REAL xPos = rect.left + (rect.Width() - m_fWidth)/2; REAL yPos = rect.top + (rect.Height() - m_fHeight)/2; // Image Graphics graphics(dc.GetSafeHdc()); graphics.DrawImage(m_pImage, xPos, yPos, m_fWidth, m_fHeight); // Border Color PenColor(255, 0, 0, 0); Pen pen(PenColor, 1.0); Rect rcBorder(rect.left, rect.top, rect.Width()-1, rect.Height()-1); graphics.DrawRectangle(&pen, rcBorder); } BOOL CSCImgStatic::OnEraseBkgnd(CDC* pDC) { return TRUE; } void CSCImgStatic::SCSetEMF(HENHMETAFILE hemf) { using namespace Gdiplus; if (m_pImage) delete m_pImage; if (!hemf) { m_pImage = NULL; Invalidate(); return; } m_pImage = new Metafile(hemf); REAL fScaleXY = (REAL)m_pImage->GetWidth()/(REAL)m_pImage->GetHeight(); CRect rect; GetClientRect(&rect); m_fHeight = (REAL)rect.Height(); m_fWidth = m_fHeight*fScaleXY; if (m_fWidth>rect.Width()) { m_fWidth = (REAL)rect.Width(); m_fHeight = m_fWidth/fScaleXY; } Invalidate(); }